package com.edu.exam.enums.curriculum.questionbank;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 题库状态枚举
 *
 * 从QuestionBank.BankStatus迁移而来
 * 定义考试系统中题库的状态，用于跟踪题库的生命周期
 *
 * @author System
 * @version 1.0.0
 */
public enum QuestionBankStatus implements BaseEnum {

    /**
     * 草稿状态 - 题库正在创建中，尚未完成
     */
    DRAFT("DRAFT", "草稿"),

    /**
     * 待审核状态 - 题库已创建完成，等待审核
     */
    PENDING_REVIEW("PENDING_REVIEW", "待审核"),

    /**
     * 审核中状态 - 题库正在审核过程中
     */
    UNDER_REVIEW("UNDER_REVIEW", "审核中"),

    /**
     * 审核未通过状态 - 题库审核未通过，需要修改
     */
    REVIEW_FAILED("REVIEW_FAILED", "审核未通过"),

    /**
     * 已发布状态 - 题库已审核通过并发布
     */
    PUBLISHED("PUBLISHED", "已发布"),

    /**
     * 测试中状态 - 题库正在测试中
     */
    TESTING("TESTING", "测试中"),

    /**
     * 活跃状态 - 题库正在正常使用中
     */
    ACTIVE("ACTIVE", "活跃"),

    /**
     * 暂停状态 - 题库暂时停止使用
     */
    SUSPENDED("SUSPENDED", "暂停"),

    /**
     * 已弃用状态 - 题库已被弃用，不再使用
     */
    DEPRECATED("DEPRECATED", "已弃用"),

    /**
     * 已归档状态 - 题库已归档，不再活跃使用
     */
    ARCHIVED("ARCHIVED", "已归档"),

    /**
     * 已删除状态 - 题库已被删除
     */
    DELETED("DELETED", "已删除"),

    /**
     * 维护中状态 - 题库正在维护中
     */
    MAINTENANCE("MAINTENANCE", "维护中"),

    /**
     * 锁定状态 - 题库被锁定，无法修改
     */
    LOCKED("LOCKED", "锁定"),

    /**
     * 迁移中状态 - 题库正在迁移过程中
     */
    MIGRATING("MIGRATING", "迁移中"),

    /**
     * 同步中状态 - 题库正在同步过程中
     */
    SYNCHRONIZING("SYNCHRONIZING", "同步中"),

    /**
     * 错误状态 - 题库存在错误，需要处理
     */
    ERROR("ERROR", "错误");

    private final String code;
    private final String description;

    QuestionBankStatus(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    public static QuestionBankStatus fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            throw new IllegalArgumentException("QuestionBankStatus code cannot be null or empty");
        }

        for (QuestionBankStatus status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException("Unknown QuestionBankStatus code: " + code);
    }

    public static QuestionBankStatus fromDescription(String description) {
        if (description == null || description.trim().isEmpty()) {
            throw new IllegalArgumentException("QuestionBankStatus description cannot be null or empty");
        }

        for (QuestionBankStatus status : values()) {
            if (status.getDescription().equals(description)) {
                return status;
            }
        }
        throw new IllegalArgumentException("Unknown QuestionBankStatus description: " + description);
    }

    @Override
    public String toString() {
        return this.code + "(" + this.description + ")";
    }
}